################################################################################
#
#   A custom Player class :
#
################################################################################







################################################################################
#   The CUSTOMPLAYER class :
################################################################################
class CustomPlayer < Player


  ##############################################################################
  #   CREATING a new instance of the CustomPlayer class :
  ##############################################################################
  def initialize(controller, x, y, rank, lives)

    super

    @collisionType  = :radius
    @collisionZone  = 4

  end





  ##############################################################################
  #   SETTING the PLAYER's representation :
  ##############################################################################
  def setImage(image, rect)

    @image        = image
    @rect         = rect

    @half_width   = (@rect[2]/2.0).to_i
    @half_height  = (@rect[3]/2.0).to_i

  end



  def setHitImage(image, rect)

    @hitImage     = image
    @hitRect      = rect

  end





  ###################################################################################
  #   ADDING a PROJECTILE :
  ###################################################################################

  def addProjectile

    # This function will have to be overidden and customized if you use ...
    # ... a customized Projectile class.

    @controller.projectiles << CustomProjectile.new(@controller,
                                                    @x, @y,                                                             
                                        @projectileTypes[@currentProjectileType])

  end





  ##############################################################################
  #   RESPONDING to events :
  ##############################################################################
  def eventResponse(e)


    # What is this event made of? What do we do about it ?                     #
    # Again, all the code assignments are for a PS2 Fighting Stick 2.          #
    ############################################################################
    case e

    when JoyAxisEvent #------------------------------------ JoyHatEvent : ------
      if    (e.axis == 3) && (e.value == -32768)  then  # Up
        @vy = -@s
      elsif (e.axis == 2) && (e.value ==  32767)  then  # Rigth
        @vx =  @s
      elsif (e.axis == 3) && (e.value ==  32767)  then  # Down
        @vy =  @s
      elsif (e.axis == 2) && (e.value == -32768)  then  # Left
        @vx = -@s
      elsif (e.axis == 2) && (e.value ==   -129)  then
        @vx = 0
      elsif (e.axis == 3) && (e.value ==   -129)  then
        @vy = 0
      end

    when JoyDownEvent #------------------------------------ JoyDownEvent : -----
      if e.button == 2
        addProjectile
      end

    when JoyUpEvent #-------------------------------------- JoyUpEvent : -------
      # Nothing

    when KeyDownEvent #------------------------------------ KeyDownEvent : -----
      case e.key
      when K_UP
        @vy-=@s
      when K_DOWN
        @vy+=@s
      when K_LEFT
        @vx-=@s
      when K_RIGHT
        @vx+=@s
      when K_SPACE
        addProjectile
      end

    when KeyUpEvent #--------------------------------------- KeypEvent : -------
      case e.key
      when K_UP
        @vy = 0
      when K_DOWN
        @vy = 0
      when K_LEFT
        @vx = 0
      when K_RIGHT
        @vx = 0
      end

    end

  end





  ##############################################################################
  #   RUNNING the player's object :
  ##############################################################################
  def run

    if @status == :alive then

      # If the player's sprite reaches the boundaries of the screen, stop it :
      unless (@half_width..@controller.screen.width-@half_width).include? @x+@vx then
        @vx = 0
      end

      unless (@half_height..@controller.screen.height-@half_height).include? @y+@vy then
        @vy = 0
      end

      # Updating the player's coordinates :
      @x+=@vx
      @y+=@vy

    end

  end





  ##############################################################################
  #   DRAWING the player's object :
  ##############################################################################
  def draw

    # Drawing the player's representation : ####################################
    if @status == :hit then
      @hitImage.blit(@controller.screen, [@x-@half_width,@y-@half_height], @rect)
    else
      @image.blit(@controller.screen, [@x-@half_width,@y-@half_height], @rect)
    end

  end

end ### End of the CUSTOMPLAYER class ##########################################
